package com.zzyl.job;

import cn.hutool.json.JSONUtil;
import com.zzyl.service.AlertRuleService;
import com.zzyl.utils.ObjectUtil;
import com.zzyl.vo.AlertRuleVo;
import com.zzyl.vo.DeviceDataVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class AlertRuleJob {
    @Autowired
    private AlertRuleService alertRuleService;

    @Autowired
    private RedisTemplate redisTemplate;

    // 定义一个定时任务方法，使用Cron表达式设定每小时执行一次
    @Scheduled(cron = " 0 * * * * ? ")
    public void alertRuleJob(){
        // 获取所有警报规则作业
        List<AlertRuleVo> list = alertRuleService.getAlertRuleJob(null,null,null);
        // 如果警报规则列表为空，则直接返回
        if(ObjectUtil.isEmpty(list)){
            return;
        }

        // 从Redis中获取所有设备数据
        List<Object> devicedata = redisTemplate.opsForHash().values("devicedata");
        // 如果设备数据为空，则直接返回
        if(ObjectUtil.isEmpty(devicedata)){
            return;
        }

        // 将设备数据转换为DeviceDataVo对象列表
        List<DeviceDataVo> deviceDataVos = new ArrayList<>();
        devicedata.forEach(data -> {
            deviceDataVos.addAll(JSONUtil.toList(data.toString(), DeviceDataVo.class));
        });

        // 遍历每个设备数据对象，检查警报规则
        deviceDataVos.forEach(deviceDataVo -> {
            alertRuleService.canCheck(deviceDataVo);
        });
    }
}
